providers.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. "use client";
  2. import { NuqsAdapter } from "nuqs/adapters/next/app";
  3. import PlausibleProvider from "next-plausible";
  4. import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
  5. import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
  6. import { I18nProviderClient } from "locales/client";
  7. import { AnalyticsProvider } from "@/shared/lib/analytics/client";
  8. import { SiteConfig } from "@/shared/config/site-config";
  9. import { DialogRenderer } from "@/features/dialogs-provider/DialogProvider";
  10. import { ToastSonner } from "@/components/ui/ToastSonner";
  11. import { Toaster } from "@/components/ui/toaster";
  12. import { ThemeProvider } from "@/components/ui/theme-provider";
  13. import type { PropsWithChildren } from "react";
  14. const queryClient = new QueryClient();
  15. export const Providers = ({ children, locale }: PropsWithChildren<{ locale: string }>) => {
  16. return (
  17. <>
  18. <AnalyticsProvider />
  19. <NuqsAdapter>
  20. <QueryClientProvider client={queryClient}>
  21. <I18nProviderClient locale={locale}>
  22. <ThemeProvider attribute="class" defaultTheme="system" disableTransitionOnChange enableSystem>
  23. <PlausibleProvider domain={SiteConfig.domain}>
  24. <Toaster />
  25. <ToastSonner />
  26. <DialogRenderer />
  27. <ReactQueryDevtools initialIsOpen={false} />
  28. {children}
  29. </PlausibleProvider>
  30. </ThemeProvider>
  31. </I18nProviderClient>
  32. </QueryClientProvider>
  33. </NuqsAdapter>
  34. </>
  35. );
  36. };